<template>
  <router-view />
</template>
<script setup>
import { ref, onMounted, onUnmounted } from "vue";
import { useUserStore } from "@/store/modules/user";
import { getToken, setToken, removeToken } from "@/utils/auth";

let beforeUnloadHandler;
let pageLoadTime = ref(0);

// 三个核心标记（沿用之前的可靠区分逻辑）
const VERIFY_FLAG = "__page_refresh_verify__"; // 刷新验证标记
const TOKEN_BACKUP_KEY = "__page_token_backup__"; // token备份
const INIT_FLAG = "__page_init_flag__"; // 首次加载标记

onMounted(() => {
  const userStore = useUserStore();
  pageLoadTime.value = Date.now();

  // --------------------------
  // 1. 新页面加载：验证上一次操作（刷新/关闭）
  // --------------------------
  const isRefresh = sessionStorage.getItem(VERIFY_FLAG) === "1";
  const backupToken = sessionStorage.getItem(TOKEN_BACKUP_KEY);
  const isFirstLoad = !sessionStorage.getItem(INIT_FLAG); // 是否首次打开

  if (isRefresh && backupToken) {
    // 场景1：刷新 → 恢复token，不调用退出接口
    console.log("加载验证：上一次是刷新，恢复token");
    userStore.token = backupToken;
    setToken(backupToken);
    // 清理标记（验证完成后再清，避免时序冲突）
    sessionStorage.removeItem(VERIFY_FLAG);
    sessionStorage.removeItem(TOKEN_BACKUP_KEY);
  } else {
    // 场景2：关闭/首次打开
    console.log("加载验证：上一次是关闭/首次打开");
    // 首次打开：初始化标记，不调用退出接口
    if (isFirstLoad) {
      sessionStorage.setItem(INIT_FLAG, "1");
    } else {
      // 非首次打开 → 确认是关闭操作 → 调用 resetToken 退出接口
      console.log("确认关闭操作，调用 resetToken 退出");
      // 关闭时可能无需等待接口返回，用 void 避免警告
      userStore
        .logout({})
        .then((res) => {
          console.log(res);
        })
        .catch((error) => {
          console.error("登录接口报错详情：", error);
        });
      // userStore.logout();
    }
  }

  // --------------------------
  // 2. 旧页面卸载前：备份token+设置标记+清理本地token
  // --------------------------
  beforeUnloadHandler = () => {
    // e.preventDefault();
    // e.returnValue = "";
    // console.log("页面开始卸载");
    // 排除快速操作（500ms内关闭，不处理）
    if (Date.now() - pageLoadTime.value < 500) return;

    // 步骤1：备份token到sessionStorage（刷新时恢复用）
    const currentToken = getToken();
    if (currentToken) {
      sessionStorage.setItem(TOKEN_BACKUP_KEY, currentToken);
    }

    // 步骤2：设置刷新验证标记
    sessionStorage.setItem(VERIFY_FLAG, "1");

    // 步骤3：清理本地token（store + Cookies）
    // 注意：此处仅清理本地，后端退出接口在新页面加载时调用（关闭场景）
    userStore.token = "";
    removeToken();
    userStore
      .logout({})
      .then((res) => {
        console.log(res);
      })
      .catch((error) => {
        console.error("登录接口报错详情：", error);
      });
  };

  // 绑定卸载事件
  window.addEventListener("beforeunload", beforeUnloadHandler);
});

onUnmounted(() => {
  // 路由切换时清理所有标记（避免页面未关闭时的残留）
  sessionStorage.removeItem(VERIFY_FLAG);
  sessionStorage.removeItem(TOKEN_BACKUP_KEY);
  sessionStorage.removeItem(INIT_FLAG);
  window.removeEventListener("beforeunload", beforeUnloadHandler);
});
</script>
